{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import joblib\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split \n",
    "from sklearn.model_selection import KFold\n",
    "import numpy as np\n",
    "import time\n",
    "import os\n",
    "\n",
    "# 计时器\n",
    "def timer (func):\n",
    "    def wrapper(*args,**kwargs): \n",
    "        start = time.time()\n",
    "        result = func(*args,**kwargs)\n",
    "        end = time.time()\n",
    "        print(func.__name__+'运行时间：',end-start)\n",
    "        return result\n",
    "    return wrapper"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "@timer\n",
    "def load_train():\n",
    "    # 导入数据\n",
    "    train_df = joblib.load('../semi_super/x_train.lz4')\n",
    "    y_train_df = train_df[['tag']]\n",
    "    x_train_df = train_df.drop(columns=['tag'])\n",
    "    x_train_df = x_train_df.fillna(-1)\n",
    "\n",
    "    x_train_arr = x_train_df.values\n",
    "    y_train_arr = y_train_df.values.ravel()\n",
    "    return x_train_arr,y_train_arr\n",
    "\n",
    "@timer\n",
    "def load_unlabel():\n",
    "    unlabel_df = joblib.load('../semi_super/x_unlabel.lz4')\n",
    "    y_unlabel_df = unlabel_df[['tag']].copy()\n",
    "    x_unlabel_df = unlabel_df.drop(columns=['tag'])\n",
    "    x_unlabel_df = x_unlabel_df.fillna(-1)\n",
    "    \n",
    "    y_unlabel_arr = y_unlabel_df.tag.values.ravel()\n",
    "    x_unlabel_arr = x_unlabel_df.values\n",
    "    return x_unlabel_arr,y_unlabel_arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "load_train运行时间： 7.500000953674316\n",
      "load_unlabel运行时间： 16.499998807907104\n"
     ]
    }
   ],
   "source": [
    "x_train_arr,y_train_arr = load_train()\n",
    "x_unlabel_arr,y_unlabel_arr = load_unlabel()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def SelectModel(model_name):\n",
    "    if model_name == 'XGB':\n",
    "        from xgboost import XGBClassifier\n",
    "\n",
    "        model = XGBClassifier(max_depth=6,\n",
    "                              learning_rate =0.04, \n",
    "                              booster='gbtree',\n",
    "                              objective='binary:logistic',\n",
    "                              early_stopping_rounds=100,\n",
    "                              scale_pos_weight=13,\n",
    "                              eval_metric='auc',\n",
    "                              gamma=1,\n",
    "                              reg_lambda=1,\n",
    "                              subsample=0.9,\n",
    "                              min_child_weight=1,\n",
    "                              seed=2018,\n",
    "                              silent=False,\n",
    "                              n_jobs=24,\n",
    "                              num_boost_round =300\n",
    "                             )\n",
    "    elif model_name == 'RFC':\n",
    "        from sklearn.ensemble import RandomForestClassifier\n",
    "        model = RandomForestClassifier(n_estimators=2000,\n",
    "                                       n_jobs =36,\n",
    "                                       max_features='sqrt',\n",
    "                                       class_weight='balanced',\n",
    "#                                        verbose =1,\n",
    "                                       random_state=2018)\n",
    "    elif model_name == 'LGB':\n",
    "        from lightgbm import LGBMClassifier\n",
    "        model = LGBMClassifier(boost='gbdt',\n",
    "                    num_leaves=135, \n",
    "                    scale_pos_weight=13,\n",
    "                    max_depth=-1,\n",
    "                    learning_rate=.05,\n",
    "                    max_bin=200,\n",
    "                    min_data_in_leaf= 60,\n",
    "                    objective='binary',\n",
    "                    metric='auc',\n",
    "                    num_threads=32,\n",
    "                    slient=False,\n",
    "                    num_boost_round =300)\n",
    "    else:\n",
    "        pass\n",
    "    \n",
    "    return model\n",
    "\n",
    "def get_score(clf,n_folds,x_train,y_train,x_base,y_base):\n",
    "    n_train = x_train.shape[0]\n",
    "    kf = KFold(n_splits=n_folds,random_state=2018)\n",
    "    score = np.zeros((n_train,))\n",
    "    \n",
    "    for i,(train_index,test_index)in enumerate(kf.split(x_train,y_train)):\n",
    "        kf_x_train = np.vstack((x_base,x_train[train_index]))\n",
    "        kf_y_train = np.hstack((y_base,y_train[train_index]))\n",
    "        kf_x_test = x_train[test_index]\n",
    "        \n",
    "        clf.fit(kf_x_train,kf_y_train)\n",
    "        tmp_trafold = clf.predict_proba(kf_x_test)[:,1].ravel()\n",
    "        score[test_index] = tmp_trafold\n",
    "     \n",
    "    return score\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%time\n",
    "# 第一级\n",
    "model_list = ['RFC','XGB','LGB']\n",
    "clf = SelectModel(model_list[0])\n",
    "score = get_score(clf,5,x_unlabel_arr,y_unlabel_arr,x_train_arr,y_train_arr)\n",
    "joblib.dump(score,'./unlabel_preds/{}.joblib'.format(model_list[0])) \n",
    "for model in model_list[1:]:\n",
    "    clf = SelectModel(model)\n",
    "    tmp = get_score(clf,5,x_unlabel_arr,y_unlabel_arr,x_train_arr,y_train_arr)\n",
    "    joblib.dump(tmp,'./unlabel_preds/{}.joblib'.format(model)) \n",
    "    score += tmp\n",
    "score = score/3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.90582158, 0.95248864, 0.98765523, ..., 0.91065481, 0.91465507,\n",
       "       0.97132189])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "unlabel_id = pd.read_csv('../../preprocess_data_new/train_ax_nodup.csv',usecols=[0],skiprows=33465).values.ravel()\n",
    "unlabel_tag_score = pd.DataFrame()\n",
    "unlabel_tag_score['id'] = unlabel_id\n",
    "unlabel_tag_score['score'] = score\n",
    "unlabel_tag_score.to_csv('./unlabel_preds1/unlabel_tag_score.csv',index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fb133d4c080>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "%matplotlib inline\n",
    "sns.distplot(score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "score"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
